{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * redo run 6, throw the kitchen sink: sample segments, global std, double/half views, local/secondary mask + std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/extended_19_run_8/1/AstroCNNModel_extended_20201203_141444',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/2/AstroCNNModel_extended_20201203_150147',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/3/AstroCNNModel_extended_20201203_154858',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/4/AstroCNNModel_extended_20201203_163557',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/5/AstroCNNModel_extended_20201203_172254',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/6/AstroCNNModel_extended_20201203_180954',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/7/AstroCNNModel_extended_20201203_185655',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/8/AstroCNNModel_extended_20201203_194419',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/9/AstroCNNModel_extended_20201203_203144',\n",
       " '/mnt/tess/astronet/checkpoints/extended_19_run_8/10/AstroCNNModel_extended_20201203_211853']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/extended_19_run_8'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-19-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v4-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 9\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 10\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[0] >= config.hparams.prediction_threshold:\n",
    "            agg_preds[tic_id].append('disp_E')\n",
    "        else:\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(pred_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_E', 'disp_N', 'disp_J', 'disp_S', 'disp_B']\n",
    "\n",
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.967391304347826\n",
      "Precision: 0.7672413793103449\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_E_p'] > 0)\n",
    "pos = (pl['disp_E'] > 0)\n",
    "\n",
    "pneg = (pl['disp_E_p'] == 0)\n",
    "neg = (pl['disp_E'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "118412801\n",
      "141753278\n",
      "158159741\n",
      "365242787\n",
      "384065528\n",
      "404220255\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000022</td>\n",
       "      <td>0.056672</td>\n",
       "      <td>0.999897</td>\n",
       "      <td>0.001261</td>\n",
       "      <td>0.000477</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000077</td>\n",
       "      <td>0.070184</td>\n",
       "      <td>0.999224</td>\n",
       "      <td>0.006253</td>\n",
       "      <td>0.001519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000457</td>\n",
       "      <td>0.050027</td>\n",
       "      <td>0.996875</td>\n",
       "      <td>0.023581</td>\n",
       "      <td>0.000787</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000136</td>\n",
       "      <td>0.086263</td>\n",
       "      <td>0.999276</td>\n",
       "      <td>0.004511</td>\n",
       "      <td>0.001036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000102</td>\n",
       "      <td>0.065359</td>\n",
       "      <td>0.999189</td>\n",
       "      <td>0.007871</td>\n",
       "      <td>0.000610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000035</td>\n",
       "      <td>0.068259</td>\n",
       "      <td>0.999835</td>\n",
       "      <td>0.000624</td>\n",
       "      <td>0.000696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000058</td>\n",
       "      <td>0.064908</td>\n",
       "      <td>0.999537</td>\n",
       "      <td>0.002338</td>\n",
       "      <td>0.001167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000328</td>\n",
       "      <td>0.034556</td>\n",
       "      <td>0.997172</td>\n",
       "      <td>0.020174</td>\n",
       "      <td>0.001282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000195</td>\n",
       "      <td>0.056737</td>\n",
       "      <td>0.996627</td>\n",
       "      <td>0.033895</td>\n",
       "      <td>0.001002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365242787</th>\n",
       "      <td>0.000170</td>\n",
       "      <td>0.118830</td>\n",
       "      <td>0.999291</td>\n",
       "      <td>0.005590</td>\n",
       "      <td>0.000366</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_E    disp_N    disp_J    disp_S    disp_B\n",
       "tic_id                                                     \n",
       "365242787  0.000022  0.056672  0.999897  0.001261  0.000477\n",
       "365242787  0.000077  0.070184  0.999224  0.006253  0.001519\n",
       "365242787  0.000457  0.050027  0.996875  0.023581  0.000787\n",
       "365242787  0.000136  0.086263  0.999276  0.004511  0.001036\n",
       "365242787  0.000102  0.065359  0.999189  0.007871  0.000610\n",
       "365242787  0.000035  0.068259  0.999835  0.000624  0.000696\n",
       "365242787  0.000058  0.064908  0.999537  0.002338  0.001167\n",
       "365242787  0.000328  0.034556  0.997172  0.020174  0.001282\n",
       "365242787  0.000195  0.056737  0.996627  0.033895  0.001002\n",
       "365242787  0.000170  0.118830  0.999291  0.005590  0.000366"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 365242787)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E_p</th>\n",
       "      <th>disp_N_p</th>\n",
       "      <th>disp_J_p</th>\n",
       "      <th>disp_S_p</th>\n",
       "      <th>disp_B_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_E_p, disp_N_p, disp_J_p, disp_S_p, disp_B_p, maxcount, disp_E, disp_N, disp_J, disp_S, disp_B]\n",
       "Index: []"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 114053589]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 1558)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][0]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "        \n",
    "pred_es.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_E']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = float(np.sum(pred_pos))\n",
    "    num_true_pos = float(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9669125346450668, max R: 0.9945652173913043, max P: 1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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mj9/vvbu3at9+/YVLTv99NO1cuVK9fb2TqipsbFRV14ZnVpn27ZtEzb25557rhYuXKgDBw7o2WeflaRXvueFCxfq3HPP1dDQUMnvddOmTTIz7dixQ0ePHi1atmrVKp122ml6+eWXtWPHjqJl8+fP19q1a+XuJde7YcMGtba2ateuXXr55ZeLlp155pk644wzdOTIET311FNFy9rb23XJJZdIkh577LEJ/8GsW7dOXV1d2rt3r/bv31+0bPHixVqxYoW6u7v12GOPFS1rbm7W5ZdfLkl68sknJ/wHf/755+vEE0/U888/rz179hQtW7RokdasWaOBgYGS3yvbiEga24jnnntOCxcuZBsxg21EHtuISD1uI/If4kdHRyf8e5TYRuTxOSIyl7cRkia8x2wjInyOiNTjNkLj3pef/exn6tnXKKl4GzH+33m9syR/Bzezdkl3S3pN/kvjhriiZsC73P2fEitkYl0nS8pvrb/u7tdNMf4FSYskPenu51cwT6ukxyWdLelWd//dEmN2S1oqaY+7L5vuuiXplltueZWkvZL01re+VQsXLnxlWVNTk3K5nEZHR1/5TyD/QaPwMd3XudV9DfUvNIcPH9b27du1evVqtbe381fcCt9D/kIzN7YRvb292r59+ysf1NlG1PdfcdlGzHxPj23btumiiy5S9HexYmwjInyOiMzVbcSxY8e0ZcuWVz63TOc9ZBsR4XPEmDS2EWs/fZ9GRse+h2+8d53OPiX6/gq3Efv379ftt79yAMOSm266qewpI9KWdNPjy5LeXfCl8ZPl/7cbkrTR3Se2opKpKycpn9hvu/uvTDG+W9HhLT92940VzPMJSX+kqDGxxt0npK5aTY8PfvCDWrRoUSUvB+aMvr4+7dq1S8uXL+fyb8gsco4QkHOEgJxjrjrrD/69qOnx7//3Jp1z+sTzQh47dky33XZb/mndNz0SO7zFzM5X1PAo11XJL2uW9BmN7RGSKHfvN7ODis4v8qpyY+OTkHbET/eWG1vCR+P770p6Y6m/aBSsuyO+woskveju36tkolwuN/UgYI7KX+8eyDJyjhCQc4SAnAP1JclzeryrxNdKHd6S92ozW+LulTYWZmqbpE2SVphZU5nL1q4uePyzCufIn675PZr6cr0LJeXPRnqvpIqaHuN3eQKyZHR0VENDQ2publZDQ0Pa5QCJIOcI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c7NyuZxGRkbU29s7oab8e9jT06PR0dGiZeXew6amJrW1tWl0dLTkHjqdnZ0ys5I/m3LvYf5nI5V+D8v9bMq9h4U/m1LvYf5nU+l7WPizKfUe5n82g4ODr7w2fz+b9zD/syn3Hs4m37N5D8vlezbvYamfzVTvIduISC23Efl1DAwMqKuri21EBduIam5n2UZEktpG5N9Td684h6FvI/L4HBGp922EpAk1s42I8DkiMpe3EXNtL6Ygmx6SCi8/O52fWL7pUdXT1JpZq6S/V3TlFim6ZG5iHn107FQhV10V7Vyyffv2Cf/wV69erVNOOUUvvfSSdu7cWbRswYIFuuCCCzQyMlK0vryNGzeqpaVFzzzzjA4ePFi0bPny5VqyZImOHDmibduKL2bT2dmpiy++WJK0ZcuWCRuM9evXq6OjQ3v27NGBAweKli1ZskTLly9Xd3e3Hn/88aJlLS0t2rhxoyRp69atEzY2F154oU444QTt27dPe/fuLVp26qmn6uyzz1Z/f/+E79XMtHnzZknRezj+H/4555yjk08+WS+88IJ27dpVtOykk07Seeedp+Hh4ZLv4RVXXKGmpibt3LnvI66OAAAgAElEQVRThw8fLlq2YsUKLV68WIcOHdL27duLlnV1dWndunWSVHK9l156qdra2rR79269+OKLRcuWLl2qZcuW6dixY9q6dWvRslwup8suu0yS9MQTT0z4j2Dt2rWaP3++9u7dq3379hUtO/3007Vy5Ur19vZOqKmxsVFXXhkdZbZt27YJG/tzzz1XCxcu1IEDB/Tss89K0ivf88KFC3XuuedqaGio5Pe6adMmmZl27Niho0ePFi1btWqVTjvtNL388svasWNH0bL58+dr7dq1cveS692wYYNaW1u1a9cuvfxy8eW6zjzzTJ1xxhk6cuSInnrqqaJl7e3tuuSSSyRJjz322IT/YNatW6euri7t3btX+/fvL1q2ePFirVixQt3d3XrssceKljU3N+vyyy+XJD355JMT/nM6//zzdeKJJ+r555/Xnj17ipYtWrRIa9as0cDAQMnvlW1EJI1txHPPPaeFCxeyjZjBNiKPbUSkHrcR+Q/xo6OjE/49Smwj8vgcEZnL2whJE95jthERPkdE5vI2Yvy/83pnIZ4A08yWSPpF/PQf3f2dU4z/haK9PJ5x9xVVrON2Se+Nn37V3d9dyetvueWWV0naK0lvfetbtXDhwleWNTU1KZfLaXR09JX/BPIfNAof033NZvc1a3+hOXz4sLZv367Vq1ervb2dv+JW+B7yF5q5sY3o7e3V9u3bX/mgzjaivv+KyzZi5nt6bNu2TRdddFHJEzyyjYjwOSIyV7cRx44d05YtW1753DKd95BtRITPEWPqeRuxf/9+3X777flFS2666aayR0+kLdSmx8mS8i3qr7v7dVOMf0HSIklPuvv5VarhY5I+FT99WNKr3b2is5EWNj1uuOEGnXDCCdUoDag7o6OjGh4eVlNTkxoaQj7/MrKMnCME5BwhIOfIumPHjum2227LP637pkeoh7cUtvemc8hKR3xflYOXzOz9Gmt4bJf0hkobHuOxQUWWNTQ0qKWlJe0ygESRc4SAnCME5ByoL0H+puzu/ZLyB4G9qtxYM1ugsabH3nJjp8PM3iHpS/HTPZJe6+4vl3nJtIzf/QjIkr6+Pj355JMTdikEsoScIwTkHCEg50B9CbLpEcuf3WaFmZXb42V1weMZXVklz8zeJOlrit735yVd4+5V2RVo/DFtQJYMDw/r4MGD5ByZRs4RAnKOEJBzoL6E3PS4P77vkHRxmXFXFTx+YKaTmdk1kv5Z0SFFBxXt4fHMTNcHAAAAAADKC7np8W8Fj99TaoCZNUjKX9nliKTvz2QiM7tc0jcltUo6Kul17v5U+VcBAAAAAIDZCLbp4e4PSbovfnq9mW0sMezDktbEjz/v7kXXLzKzq83M49sdpeYxs7WSvq1oj5IeSde6+yPV+B4AAAAAAMDkQr16S94Nig5ZaZN0j5l9StHeHG2SrpP0vnjcDkm3VrpyMztL0n9Iyl9L9g8lHTWz88q87EV3f7HM8pI4QzSyrLW1VcuXL1dra2vapQCJIecIATlHCMg5UF+Cbnq4+xYze7ukOyXN09hlZAvtULR3xvESy6aySdKigue3TTawwC2Sbq50IpoeyLKWlhYtWbIk7TKARJFzhICcIwTkHKgvwR7ekufu35J0gaKGxA5JvYrO3/FTSR+VdJG770yvwukZGhqaehAwRw0NDemll14i58g0co4QkHOEgJwD9SX4pockufsed7/R3c929w53X+Dul7j7Z9y9t8zrfuDuFt/eXWL5HQXLp3u7eSbfw8DAwExeBswJ/f392rZtm/r7+9MuBUgMOUcIyDlCQM6B+kLTAwAAAAAAZBJNDwAAAAAAkEk0PQAAAAAAQCbR9MiIhgZ+lMiuhoYGdXZ2knNkGjlHCMg5QkDOgfoS9CVrs6S9vT3tEoDEdHR06OKLL067DCBR5BwhIOcIATkH6gvtRwAAAAAAkEk0PTKiu7s77RKAxBw/flw//OEPdfz48bRLARJDzhECco4QkHOgvtD0ADAnuHvaJQCJI+cIATlHCMg5UD9oegAAAAAAgEyi6QEAAAAAADKJpgcAAAAAAMgkLlmbEW1tbWmXACSmvb1d69evVy6XS7sUIDHkHCEg5wgBOQfqC02PjGhsbEy7BCAxjY2N6ujoSLsMIFHkHCEg5wgBOQfqC4e3ZER/f3/aJQCJ6e/v189//nNyjkwj5wgBOUcIyDlQX2h6ZMTw8HDaJQCJGRoa0oEDBzQ0NJR2KUBiyDlCQM4RAnIO1BeaHgAAAAAAIJNoegAAAAAAgEyi6QEAAAAAADKJpkdGNDc3p10CkJiWlhYtWbJELS0taZcCJIacIwTkHCEg50B94ZK1GdHa2pp2CUBiWltbtXz58rTLABJFzhECco4QkHOgvrCnR0Zw9RZk2fDwsI4cOULOkWnkHCEg5wgBOQfqC02PjOA64Miyvr4+Pf744+rr60u7FCAx5BwhIOcIATkH6gtNDwAAAAAAkEk0PQAAAAAAQCbR9AAAAAAAAJlE0yMjzCztEoDEmJlaWlrIOTKNnCME5BwhIOdAfeGStRnR0dGRdglAYjo7O7Vx48a0ywASRc4RAnKOEJBzoL6wpwcAAAAAAMgkmh4Z0dPTk3YJQGK6u7v14IMPqru7O+1SgMSQc4SAnCME5ByoLzQ9MsLd0y4BSIy7a3BwkJwj08g5QkDOEQJyDtQXmh4AAAAAACCTaHoAAAAAAIBMoukBAAAAAAAyiaZHRuRyubRLABLT1tamCy+8UG1tbWmXAiSGnCME5BwhIOdAfWlKuwBUR1MTP0pkV1NTk0444YS0ywASRc4RAnKOEJBzoL6wp0dGDAwMpF0CkJiBgQHt2rWLnCPTyDlCQM4RAnIO1BeaHhkxNDSUdglAYgYHB7V3714NDg6mXQqQGHKOEJBzhICcA/WFpgcAAAAAAMgkmh4AAAAAACCTaHoAAAAAAIBMoumREVy9BVnW3NysU089Vc3NzWmXAiSGnCME5BwhIOdAfeE35YzI5XJplwAkJpfL6eyzz067DCBR5BwhIOcIATkH6gt7emTEyMhI2iUAiRkZGVFPTw85R6aRc4SAnCME5ByoLzQ9MqKvry/tEoDE9Pb26qc//al6e3vTLgVIDDlHCMg5QkDOgfpC0wMAAAAAAGQSTQ8AAAAAAJBJND0AAAAAAEAm0fQAMCeYWdolAIkj5wgBOUcIyDlQP7hkbUZ0dnamXQKQmK6uLm3evDntMoBEkXOEgJwjBOQcqC/s6QEAAAAAADKJpkdGcEksZFlPT48eeeQR9fT0pF0KkBhyjhCQc4SAnAP1haZHRoyOjqZdApCY0dFRdXd3k3NkGjlHCMg5QkDOgfpC0wMAAAAAAGQSTQ8AAAAAAJBJND0AAAAAAEAm0fTIiNbW1rRLABKTy+V0zjnnKJfLpV0KkBhyjhCQc4SAnAP1pSntAlAdzc3NaZcAJKa5uVknn3xy2mUAiSLnCAE5RwjIOVBf2NMjIwYHB9MuAUjM4OCg9u7dS86RaeQcISDnCAE5B+oLTY+MYKOKLBsYGNCuXbs0MDCQdilAYsg5QkDOEQJyDtQXmh4AAAAAACCTaHoAAAAAAIBMoukBAAAAAAAyiaZHRjQ1cSEeZFdTU5NOOukkco5MI+cIATlHCMg5UF/4l5gRXAccWdbW1qbzzjsv7TKARJFzhICcIwTkHKgv7OmREaOjo2mXACRmdHRUg4OD5ByZRs4RAnKOEJBzoL7Q9MiI3t7etEsAEtPT06MHH3xQPT09aZcCJIacIwTkHCEg50B9oekBAAAAAAAyiaYHAAAAAADIJJoeAAAAAAAgk2h6AAAAAACATOKStRnR0dGRdglAYjo7O3XFFVeosbEx7VKAxJBzhICcIwTkHKgvND0ywszSLgFIjJmpqYnNFbKNnCME5BwhIOdAfeHwlozo6+tLuwQgMb29vXriiSe4NDMyjZwjBOQcISDnQH2h6ZERIyMjaZcAJGZkZESHDx8m58g0co4QkHOEgJwD9YWmBwAAAAAAyCSaHgAAAAAAIJNoegAAAAAAgEyi6ZERLS0taZcAJKa1tVUrVqxQa2tr2qUAiSHnCAE5RwjIOVBfuJZSRtD0QJa1tLRo8eLFaZcBJIqcIwTkHCEg50B9YU+PjBgaGkq7BCAxQ0NDeuGFF8g5Mo2cIwTkHCEg50B9oemREQMDA2mXACSmv79f27dvV39/f9qlAIkh5wgBOUcIyDlQX2h6AAAAAACATKLpAQAAAAAAMommBwAAAAAAyCSaHhnR2NiYdglAYhobG9XV1UXOkWnkHCEg5wgBOQfqC5eszYi2tra0SwAS097ernXr1qVdBpAoco4QkHOEgJwD9YU9PQAAAAAAQCbR9MiI7u7utEsAEnP8+HHde++9On78eNqlAIkh5wgBOUcIyDlQX2h6AAAAAACATOKcHnPbqfkH7OmBrDp27Jhuu+02SdLKlSvV1dWVckVA9ZFzhICcIwTkHCEYtxfTqZKeS6mUaWFPD0lmttTMbjWz7WbWY2aHzOxhM/uImbVXcZ7Xm9ndZvacmQ3E93eb2eurNQcAAAAAAIgEv6eHmb1R0p2S5hV8uV3S+vj2XjO71t13zmKOBkl/J+n6cYsWx7e3mNnfS3q/u4/OdB4AAAAAADAm6D09zOwiSV9X1PDolvRxSZdLukbS7fGwVZK+bWaz2TftkxpreGyR9A5Jl8b3W+Kvv1fSn850Ai5ZixC0t1dtxyugbpFzhICcIwTkHKgPoe/p8XlJbZKGJf2yuz9YsOx7Zva0pM8oanx8WNLNlU5gZqsk/W789KeSNrt7X/z8YTP7H5LuVbRXyUfM7Msz2aukoSHo/hUCQc4RAnKOEJBzhICcA/Uh2H+JZnappE3x038Y1/DIu1XSz+LHN5hZ8wym+pDGmku/XdDwkCS5e6+k346fNkn6nRnMoYGBgZm8DJhT+vv70y4BSBw5RwjIOUJAzoH6EGzTQ9JbCh5/pdSA+PwaX4ufniDp1ZVMYGYm6c3x0+3u/uNJ5vmxpJ/HT98cv64iw8PDlb4EmHPIOUJAzhECco4QkHOgPoTc9Lgyvu+R9EiZcfcWPL6iwjnOlHR6ifWUm2expGUVzgMAAAAAAMYJ+Zwea+L7ne5erg27vcRrpuucSdYznXmencb6G/MPDh48qH379pUdzHXCMRcVXge8u7tbx44dS7EaIBnkHCEg5wgBOUcIenp6Cp82TjauXgTZ9DCznKSF8dPnyo1198Nm1iOpQ9KSCqd6VcHjsvNI2lvweLrznJR/cM8990y3JmDOuuuuu9IuAUgcOUcIyDlCQM4RiJOmHpKuUA9vKdzloXsa4/OtrM4E5ylsl013nhcrKwcAAAAAgKqp+99Jg9zTQ1Ku4PHgNMbnL43SluA8hZdfme48WyVdImmRpIOSRqYYf2Ca6wUAAAAAoJRGSSfHj7emWch0hNr0KLx+VMs0xrfG931lR81untaCx9Oa56abbhqQ9NMKawIAAAAAYDb2pF3AdIV6eMvxgsfTOZSkI76fzqEwM52no+BxpfMAAAAAAIBxgmx6uHu/osNBpOKTjU5gZgs01pDYW25sCYUnLy07j4pPXlrpPAAAAAAAYJwgmx6xbfH9CjMrd5jP6oLHP5vhHOPXU+15AAAAAADAOCE3Pe6P7zskXVxm3FUFjx+ocI5nJe0vsZ5SNsf3+yTtrnAeAAAAAAAwTshNj38rePyeUgPMrEHSO+OnRyR9v5IJ3N0lfTN+utrMNkwyzwaN7enxzfh1AAAAAABgFoJterj7Q5Lui59eb2YbSwz7sKQ18ePPu/tQ4UIzu9rMPL7dMclUn9PYpWS/YGZFl6ONn38hfjocjwcAAAAAALMUbNMjdoOiy8M2SbrHzD5mZhvM7NVm9reSPhOP2yHp1plM4O47JH02frpe0gNm9nYzW29mb1d0yMz6ePln3f3pmX4zAAAAAABgjIV+JIWZvVHSnZLmTTJkh6Rr3X1nidderbFDXr7q7u+eZI4GSbdL+s0ypfyDpPe5++j0KgcAAAAAAOWEvqeH3P1bki6QdJuiBkevovN3/FTSRyVdVKrhUeEco+5+vaRrFZ3jY7+kwfj+m5LeLemopG1m1mNmh8zsYTP7iJm1z2buQmb2ejO728yeM7OB+P5uM3t9teYAJmNmS83sVjPbXu2cm1m7mb3NzP46XudhMxsys4Nm9qCZ3Wxmp1brewEmk2TOy8zZbma7Cg633J3EPEBeLXNuZq8xszvMbGc811Ez22Fm3zCzD5pZZzXnA/JqkXMzW2Zmf25mj5jZkfizyyEz+5GZ/bGZLarGPEAhM1tkZr9iZp8ws/9lZi9P45QNs53zHWZ2j5kdMLN+M9tjZndOcoqJ6s8f+p4eaZvNniYVzNEg6e8kXV9m2N9Lej97miAJSebczC5QdJjYVB98jynam+rrlc4BTEcttueTzPsXis5BlbfH3ZdVcw4gr1Y5N7MFkr4i6c1TDL3I3R+bzVzAeDX6fP4bkv5WUluZYYckXefu35npPMB4ZlauATDp0QsznKtN0jckvWGSIaOSPuHut1RrzlKC39MjTWZ2kaSvK9qgdkv6uKTLJV2j6HAYSVol6dtm1jWLqT6psYbHFknvkHRpfL8l/vp7Jf3pLOYASqpBzudprOHxgKSPSXqtpHWSXqfoA8VoPO6/s2cTklDD7XmpeT8kqV/S8WqtFyilVjk3s/mSvqOxhsfdkn5d0gZJl0h6m6TPS3pupnMAk6lFzs3sCkl3KGp4jCpq8L1F0efzX5P0rXjoiZK+aWbLZzIPMA2/kHRPguv/ssYaHt/XWM6vl/SMon7EzWb2vgRrkNydW0o3ST+U5JKGJG0ssfwj8XKXdPMM51gVr98lPSypbdzy9vjr+TpWpP2+cMvWLemcK/og8nVJ55QZ82ZFHypc0k7Fe7lx41atWy225yXW2ajoUEyX9EeSdsePd6f9fnDL5q1WOZf0tXgd/ZLeVGacSWpK+33hlq1bjT6f/8+Cdfyfk4y5tWDMF9N+X7hl5ybpFkm/IumU+PmygqzdUcV5fqlgvf9DUuO45Qsl7YmXH5a0IKnvmcNbUmJml0r6Sfz0b939AyXGNEh6UtFlc49IWuTjLps7jXm+JOmD8dON7v7jEmM2SHowfvold/9vlcwBTKZWOZ9mLd+Q9Kvx04vd/dFqz4EwpZVzM7tR0Yfinys6N9UOSUvF4S1IQA0/t1wp6b746Ufc/S9mXjVQmRrm/JCkBZIOuvvCScbMj9cvSY+6+8WVzAFMl5ktk/Rs/LRqh7eY2b9Ler2kYUlnuvuEvfPM7DpJd8VPf8/dPzt+TDVweEt63lLw+CulBnh0fo2vxU9PkPTqSiYwM9PYrqHbSzU84nl+rOhDsyS9OX4dUA2J57wC3y94fFZCcyBMNc+5mS2V9In46QfcfXA26wOmoVY5/7/i+6OSvjiD1wOzUauct8T3z042wN2PSnp53HhgTogP/bomfvrdUg2P2L8qOu+eJL01qXpoeqTnyvi+R9IjZcbdW/D4igrnOFPS6SXWU26exYp2cQKqoRY5n67WgscjCc2BMKWR8y9J6pD0j+7+g1muC5iOxHNuZi0a+2PNd9y9P/56o5ktia90katknUCFarU9z/+x8czJBpjZPEW7/xeOB+aKSzTWrJv099D4jzb5P8xfYmbNSRRD0yM9a+L7ne4+XGbc9hKvma5zJllPtecBJlOLnE/XVQWPf5bQHAhTTXMe7wr6BkXHv354iuFAtdQi5xdKyjc1tprZPDP7nKK/dv9C0V/Fj5rZd8zs6grXDUxHrbbnfxPfn2RmEw6hif1RifHAXDGT30ObJK1MohiaHimI/0qR79yWPfO4ux9W1G2WpCUVTvWqgsdTneF8b8HjSucBJqhhzqdTy4WSro2fbnV3mh6oilrnPL6M5+fip7/v7i/NZD1AJWqY88IPyQ2KTtR7g6JDCPJaJL1G0vfM7KMVrh+YVI2351/W2CEyf2Vmt5vZG81svZm9zczulvS78fJPuvt3ZzAHkKa6+j2Upkc6Ci9v1T2N8fmNamfZUbObp6fgcaXzAKXUKudlmVmrpL9XdKULKbr0HFAttc75ZyWdoujk07dPMRaollrl/MSCxx9V9Be//63o8oY5SYsUnZz9qKIrt/yZmb15/EqAGarZ9tzdR9z9XZL+q6THJb1X0dUtHpb0L4rOLfJ9Sa919z+sdP1AHair30NpeqSj8HjU6Zx8biC+b0twnoGCx5XOA5RSq5xP5YuS1sePv+ru36ry+hG2muXczDZL+k1FZ0H/gHP5NdROrXLeMW7O70j6FXd/2N0H3P0ld/8bRZdaHI3HfZoTsKNKavq5xczWSHqnpPMnGbJR0vVmtngm6wdSVle/h9L0SEd/wePpnI05fwLGvgTnKTzJY6XzAKXUKueTMrOPKfrriRT99YTLMaPaapLzeI+lv1P01+3Pu/sTlbwemKU0PrdI0kfdfcKJp939fkVn/Jei8ylM9ksjUImafW4xs02K9th7o6R9kn5D0qnxvEsUfV7plXSdpIfM7NxK5wBSVle/h9L0SMfxgsfT2YUn/5eP6exqN9N5Cv+6Uuk8QCm1ynlJZvZ+SZ+Kn26X9AZ37ynzEmAmapXzj0s6W9FxrzdV+FpgttL43PKSu28pM/Y/Ch5fUuE8QCk1yXncxL5L0nxJByRtcPc73f0Fdx9y9+fc/UuSNiv6xfF0SV+tZA6gDtTV76FNSawU5bl7v5kdlHSSik/yMkF80rp8EPaWG1tC4Uljys6j4pPGVDoPMEENc15qfe9QdElPSdqj6JjYl8u8BJiRGuY8f8LG70p64yR78+fX3RFf4UWSXnT371U4F1CkhjkvHF/Jie9OrnAeYIIa5vy/SMofsvIFdz8wST1PmdmdivZYvdjMLnT3xyucC0jL+N9Df1pmbOK/h9L0SM82SZskrTCzpjKXxVpd8LjSK05sm2Q91Z4HmEwtcl7EzN6k6IzoDZKel3SNu0/14RmYjVrkPL9r6HviWzkLFf0VUZLulUTTA9VQi5w/VfC4cdJRE5eXu7QoUIla5LzwErePTjH2EY0dprta0UlPgblgJr+HDkt6OoliOLwlPffH9x2SLi4z7qqCxw9UOMezkvaXWE8pm+P7fZJ2VzgPMJla5PwVZnaNpH9W1NA9qGgPj2dmuj5gmmqacyAliefc3fdI+kX8dNkUJyg9q+DxvkrmAcqoxfa8sJEy1R+gmyd5HVDvHtbYCUwn/T3UzFokbci/xt2HkiiGpkd6/q3gccm/2plZg6KzOkvSEUWXrpq2+Mz+34yfrjazDaXGxV/Pd9i+yRUBUEWJ57xgPZcrynurossZvs7dnyr/KqAqarE9t6luig7lkqQ9BV+/usLvBZhMrbbn/xLfz5N0TZlxbyt4fP+ko4DK1CLnzxY83jTF2MJfFp+ddBRQZ9z9uKT/jJ++xswmO2TsbYq295J0d1L10PRIibs/JOm++On1ZraxxLAPa2wXuM+P73yZ2dVm5vHtjkmm+pyk/JnPv2BmRZcBip9/IX46HI8HqqJWOTeztZK+regvMz2SrnX3R6rxPQBTqeH2HEhNjT+35M/6/5dmNm/8ADP7PyRdHT/9trtzLjJURY1y/p+KrswiSR80s5JXHzKz10t6a/x0n6THpv+dAMkys3cX5PzmSYb9RXzfJOmvzKzosEUzWyjpz+OnRyT9fSLFinN6pO0GRbvEtUm6x8w+pahb3KboElXvi8ftkHTrTCZw9x1m9llJvy9pvaQHzOzPJT2jaNfQj0q6KB7+WXdP5DgqBC3RnJvZWYrO4n9C/KU/lHTUzM4r87IX3f3FSucCykh8ew7UgVp8bvmFmf2xpM8ouhTtQ/HnlicU/TXwbZI+GA8/Jul3ZvatAJNKNOfufsTM/kzSJyR1SfqRmX1B0nckHZZ0iqQ3S/otjf2B+vfdfXTG3xFQwMyulLSi4EsLCx6vMLN3F4539ztmMo+7f8/M/knRv5s3SfqOmX1O0ekXzld0Zboz4uEfdffDM5lnOmh6pMjdt5jZ2yXdqeg/8k+VGLZD0V+tj5dYNl0fl7RI0m8qanD8U4kx/6Dol0WgqmqQ802K8p132zRec4ukm2cwF1BSDbfnQGpqlXN3/6yZnajoDzNnS/pyiWEvSnoLf6xBtdUo538q6URFDZZOSR+Lb+MNSfoDd79zhvMApbxX0rsmWXZFfCt0xyzm+k1F/47eIOnV8a3QqKQ/cfe/m8UcU+LwlpS5+7ckXaDoF7UdinZ3O6Losj4flXSRu++c5Ryj7n69pGsVnfNgv6ITy+yPn7/B3d9LBxlJqUXOgbSRc4SgVjl3948p+uD9j4pOsD6g6HxND0v6I0mr3P3B2c4DlJJ0zj3yO5IukfQ3kp6UdFzRIelHFV215S8lnefufzHpioA65+597n6tpF9XtDfTi4p+D90r6f+VdKW735x0HcY5KwEAAAAAQBaxpwcAAAAAAMgkmh4AAAAAACCTaHoAAAAAAIBMoukBAAAAAAAyiaYHAAAAAADIJJoeAAAAAAAgk2h6AAAAAACATKLpAQAAAAAAMommBwAAAAAAyCSaHgAAAAAAIJNoegAAAAAAgEyi6QEAAAAAADKJpgcAAAAAAMgkmh4AAAAAACCTaHoAAAAAAIBMoukBAAAAAAAyiaYHAAAAAADIJJoeAAAANWRmy8zMx91+UGLczSXGvbv2FQMAMHfR9AAAAFUxyS/phbdRMztuZnvM7B4z+wMzW5p23QAAILtoegAAgFoxSZ2SzpD0WkmflPRzM/tIqlUBAIDMoukBAADS1CrpM2b2zrQLAQAA2dOUdgEAACDT9kn6Rvx4gaT1ks4pMe4mSV+rVVEAACAMND0AAECSdrr7h/JPzMwk/ZWkD44bt9zMlrr7nppWBwAAMo2mBwAAqBl3dzP7C01seu9ABxIAAAYcSURBVEjSaZJKNj3MrFPSuyX9sqS1kk6KF70o6ceSvi7pm+7uU9VgZl2SfkPReUXWSlooqVnSC5L2SrpX0rfd/UfjXneWpM2K9lZZK+lkSSdKmi+pX9IhSVslfVfSP7r7walqAQAAyaLpAQAAam3/JF8/UuqLZnadpC8pOjxmvGXx7TpJPzaz/+ruz002sZm9R9JtihoV450R366Q9Ovxegv9uaRfnWTVnRo7Seu1km4ys/e6+79MVgsAAEgeJzIFAAC19qoSXxuStHv8F83sQ5LuUumGx3gbFDU+Tiu10Mz+RNKXVbrhUW0nSLrLzDbWYC4AADAJ9vQAAAA1Y2YNkn6vxKI73b1/3NhLJd1aYuyTkn6q6JCUqyUtLli2WNEJUV87bl1vlPSHJdY1IukHkp6W1CLpQknrpvg2dkvaKelgfDNFh+ZcoeiQl7xmRZfl/aUp1gcAABJC0wMAACRphZl9Ln68QNIlktaMG7NL0h+XeO3NmrhX6m+7+xfzT8ysTdLdkl5XMOY1ZrbZ3X9Y8LVPl1j/DklvcvefF37RzFZKel+J8f+PpI+6+zMllsnMOiR9R1Lh3h1Xm9kCdz9c6jUAACBZND0AAECSFku6YZJlo5L+VdIN7l50ng8zm6dxe2tIeqiw4SFJ7t5nZp9QcdNDkn5N0g/jda2WdG6Jud82vuERr/NpSR8p8fX8+joV7dWxWtEJVTskNcbDGse97P9v715CrarCOID/P7kUlBRBZYFkYJgICRHYxKDXoEkEBRU5CBIbBA2ijLyTmikUCTVJIqgGgRA9HDQIKrTsAYlQZiJR9KBBEJVRopSrwTkXjtuT3hP3QZvfDy6cvdZejzu793/W/nZlUPT0ve58AMD8E3oAAIvlQJJnuoHH0DU59e+UdVV1xrezDI2etrh2TP8HrbUvZjlXkqSqLs7gxMiGJGdPMPTCSdYBAOaOQqYAwGJZm+TdqrprTN9FY9omccnI52Vj+g9NMllVXZBkb5L7MlngkSTnTHg/ADBHhB4AwHza3VqrDP7xX5/ko07/VJIXquqKOV536RzPN53kv+6x5nIjAMDsebwFAJh3rbWjSfZW1S1JPkuyYqT73CTbMqjDMeOnMdMczKBQ6GwcPcNcq2c5z4zbxrS9mMHbZb5urf2ZJFW1NcljE84NAMwToQcAsGBaa0eqakuSVzpdd1TV1a21/cPr/Rm8Tna0MOhUkodaa2es61FVo+M+GXPL+qpa01o7OMutX9a5PpJkY2vtRKd9XP0QAGCReLwFAFhoO5N8NaZ9euZDa+23JO90+lcl2TF8Newpqmp5VT1QVfuSXDcy15dJukVLlyR5vaquHDPPiqra1mk+3rlemmTlyJiqqoeT3DBubwDA4nDSAwBYUK21E1X1ZJIdna7bq2p1a22myOjjSW7OyV/SbEpyZ1XtSfLjsG9ZBq+kXZl/N53kzU7bqiQHqmp3ksNJzkqyJsm6JD/k5MdU9iW5fuR6SZJPq+qtJH8Mx1x1mvUBgEUg9AAAFsNLSZ5IculI25IkW5LcmySttY+r6pEkT3fGnp/k1kkWa63tGtbb2NLpmkpy0/DndJ7NyaFHkpyX5O6R67+S7Ely4yR7AwDmj8dbAIAF11o7lmT7mK57qurykfu2ZxAs/DzB9J9ncAqku+Z0kvuT/D7JXodjX0vy1GluOZ5kY5L3J50bAJg/Qg8AYLE8l+TXTttUkkdHG1prOzMoJLopyatJvskguPg7g4Kih5K8kWRzkrWttbWttcPjFmytPZ9keZIHk+xK8l0Gj6ccS/J9kg+TbE2yYczYzRmcMHk7yS/DMd9mcGplXWvt5Yl+ewBg3tUsCqADAAAA/O846QEAAAD0ktADAAAA6CWhBwAAANBLQg8AAACgl4QeAAAAQC8JPQAAAIBeEnoAAAAAvST0AAAAAHpJ6AEAAAD0ktADAAAA6CWhBwAAANBLQg8AAACgl4QeAAAAQC8JPQAAAIBeEnoAAAAAvST0AAAAAHpJ6AEAAAD0ktADAAAA6CWhBwAAANBLQg8AAACgl4QeAAAAQC8JPQAAAIBeEnoAAAAAvST0AAAAAHrpH8FIJ7lNlQpWAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs = ([], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
